package Polymorphism02;

/**
 * 向下转型
 *  格式:
 *    子类型 引用变量=(子类型)父类型引用变量
 *    父类型可以是普通/抽象/接口
 */
class Person{
    public void eat(){
        System.out.println("吃东西");
    }
}
class Students extends Person{
    public void study(){
        System.out.println("学java");
    }
}
/**
 * 这个例子中我们只有一个学生对象
 * 但是这个学生对象扮演了两种角色,分别是人和学生
 * 当扮演人的角色的时候就具有人的行为
 * 当扮演学生的角色的时候就具有学生的行为
 */
public class Demo {
    public static void main(String[] args) {
        Person p = new Students();
        p.eat();
        //由于p指向的学生对象扮演的是人的角色,所以可以调用Person类中的方法
        //p.study();//由于p指向的学生对象扮演的是人的角色,但是Person类不具有学生的学习方法,不能调用

        Students s = (Students) p ;
        //类比基本数据类型:int i=(int)d //double=>int
        //Person=>Student
        s.study();
        s.eat();


    }
}
